package com.study.modules.designPatterns.No4ResponsibilityChainMode;

/**
 * 责任链模式
 * 责任链模式是一种对象结构型模式，它包含了一条链条，每个对象都包含对下一个对象的引用。
 * 这条链条可以按顺序处理请求，也可以按链条中的对象类型顺序处理请求。
 * 在这种模式中，通常每个对象只处理一类特定的请求，但它可以处理请求链中的任何对象。
 * 这种模式给予请求的类型，对请求的发送者和接收者进行解耦。
 * 这种模式通常适用于处理一些具有共同结构的请求。
 * 例如，在一个对象中定义一个处理请求的操作，可以将这些请求的处理委派给链中的对象。
 * 这种模式通常要求对请求的发送者和接收者进行硬编码，并预留请求的类型。
 * 责任链模式的优点：
 * 1、降低耦合度；
 * 2、简化请求的处理；
 * 3、增强系统的可扩展性；
 * 4、便于系统的维护和扩展。
 * 责任链模式的缺点：
 * 1、请求的处理可能不是按顺序处理，并且每个处理对象都有可能无法处理该请求；
 * 2、系统性能将受到一定影响，而且在进行代码调试时不太方便，可能会造成循环调用。
 * 责任链模式适用于以下情况：
 * 1、请求的处理者和接收者具有明确的职责；
 * 2、可以根据请求的类型和顺序对请求进行处理；
 * 3、系统中存在多个处理对象，它们处理同一个请求的不同方式；
 * 4、请求的处理者和接收者可以动态地进行增加和删除。
 * 责任链模式的使用场景：
 * 1、有多个对象可以处理同一个请求，具体哪个对象处理该请求由运行时刻自动确定；
 * 2、在不明确指定接收者的情况下，向多个对象中的一个提交一个请求；
 * 3、可动态地增加和删除处理对象。
 * 责任链模式的应用实例：
 * 1、在Windows操作系统中，Windows消息机制就是一种责任链模式的应用。
 * 2、在JavaEE中，Struts2框架就是使用责任链模式的。
 * 3、在Spring框架中，Spring AOP就是使用责任链模式的。
 * 4、在Android中，Android的消息机制就是使用责任链模式的。。
 */
public class TestResponsibilityChain {

    public static void main(String[] args) {
        Logger fileLogger = new FileLogger();
        Logger consoleLogger = new ConsoleLogger();
        fileLogger.setNext(consoleLogger);

        fileLogger.log("This is a test message.");
    }

}
